package com.feilong.modules.common.utils;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
/**
 * 图片处理工具类：<br>
 * 功能：缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
 * @author Administrator
 */
public class ImageUtils {

    public static final String IMAGE = "Image";
    public static final Map<String,String> imageMap = new HashMap<>();
    /**
     * 常用的图片格式
     */
    public static final String IMAGE_TYPE_GIF = "gif";// 图形交换格式
    public static final String IMAGE_TYPE_JPG = "jpg";// 联合照片专家组
    public static final String IMAGE_TYPE_JPEG = "jpeg";// 联合照片专家组
    public static final String IMAGE_TYPE_BMP = "bmp";// 英文Bitmap（位图）的简写，它是Windows操作系统中的标准图像文件格式
    public static final String IMAGE_TYPE_PNG = "png";// 可移植网络图形
    public static final String IMAGE_TYPE_PSD = "psd";// Photoshop的专用格式Photoshop

    /**
     * 初始化支持使用的图片格式Map
     */
    static {
        imageMap.put(IMAGE_TYPE_GIF,IMAGE);
        imageMap.put(IMAGE_TYPE_JPG,IMAGE);
        imageMap.put(IMAGE_TYPE_JPEG,IMAGE);
        imageMap.put(IMAGE_TYPE_PNG,IMAGE);
    }

    /**
     * 图像类型转换：GIF->JPG、GIF->PNG、PNG->JPG、PNG->GIF(X)、BMP->PNG
     * @param srcImageFile 源图像地址
     * @param formatName 包含格式非正式名称的 String：如JPG、JPEG、GIF等
     * @param destImageFile 目标图像地址
     */
    public final static void convert(String srcImageFile, String formatName, String destImageFile) {
        try {
            File f = new File(srcImageFile);
            f.canRead();
            f.canWrite();
            BufferedImage src = ImageIO.read(f);
            ImageIO.write(src, formatName, new File(destImageFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 校验文件后缀，只能是jpg、jpeg、png、gif格式
     * @param file
     * @return
     */
    public static boolean verifyImageSuffix(MultipartFile file){
        String fileName = file.getOriginalFilename();
        // 获取后缀名
        String ext = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
        // 小写转换
        ext = ext.toLowerCase();
        if (StringUtils.isBlank(imageMap.get(ext))) {
            return false;
        }
        return true;
    }
}

